/* Copyright (C) 2010 Juan José Ortilles jortilles@gmail.com
 *
 * This program is free software; you can redistribute it and/or modify it 
 * under the terms of the GNU General Public License as published by the Free 
 * Software Foundation; either version 3 of the License, or 
 * any later version.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * 
 * See the GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along 
 * with this program; if not, write to the Free Software Foundation, Inc., 
 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
 *
 */
package net.juantxu.pentaho.launcher.utilidades;

import java.io.File;
import java.net.URI;

import org.apache.log4j.Logger;

public class RealizaComprobaciones {
	static Logger log = Logger.getLogger(RealizaComprobaciones.class);

	/*
	 * Realiza las comprobaciones para el entorno Nix Si hay algun error
	 * devuelve el código de error, so no devuelve 0
	 */
	public int compruebaNix(String ejecutable) {
		int res = 0;
		//res = compruebaJava();
		if (res == 0) {
		// compruebo el ejecutable
		if (new ValidaEjecutableNix().valida(ejecutable)) {
			log.info("Si que existe el ejecutable y se puede ejecutar");
		} else {
			// no se encuetra el ejecutable
			log.error("no se encuentra el ejecutable");
			res = 7;
		}
		}
		return res;
	}

	/*
	 * Realiza las comprobaciones para el entorno windows Si hay algun error
	 * devuelve el código de error, so no devuelve 0
	 */
	public int compruebaWin(String ejecutable) {
		int res = 0;
			// compruebo el ejecutable
			if (new ValidaEjecutableWin().valida(ejecutable)) {
				log.info("Si que existe el ejecutable y se puede ejecutar");
			} else {
				// no se encuetra el ejecutable
				log.error("no se encuentra el ejecutable");
				res = 7;
			}
		return res;
	}

	/*
	 * Compruebo si hay java
	 * YA NO SE USA
	 */
	int compruebaJava() {
		// YA NO SE USA
		int res = 0;
		// comrpuebo java home
		if (compruebaJavaHome()) {
			res = 0;
			log.info("Si existe JAVA_HOME");
			// compruebo jdk
			if (!esJDK()) {
				res = 5;
				log.error("Java Home apunta a JRE y no a JDK");
			}
		} else {
			res = 3;
			log.error("no existe JAVA_HOME");
			informaJAVAHOME();
		}
		return res;
	}

	private void informaJAVAHOME() {
		// YA NO SE USA
		String os = "";
		String cadenaBusqueda = "http://www.google.com/search?q=set+JAVA_HOME+";
		os = System.getProperty("os.name");
		log.debug("sistema operativo :".concat(os));
		if (os.toLowerCase().contains("win")) {
			cadenaBusqueda = cadenaBusqueda + "windows";
		} else {
			cadenaBusqueda = cadenaBusqueda + "linux";
		}

		try {
			java.awt.Desktop.getDesktop().browse(new URI(cadenaBusqueda));
		} catch (Exception e) {
			log.error("error lanzando el navegador");
			e.printStackTrace();
		}
		log.error("no existe JAVA_HOME");
		log.error("si es un sistema *nix debes poner java home en /etc/profile");
	}

	/*
	 * Comrpuebo que el Java que se usa sea un JDK
	 */

	public boolean esJDK() {
		// YA NO SE USA
		String java_home = System.getenv("JAVA_HOME");
		File f = new File(java_home + "/lib/tools.jar");
		log.debug("comprobando si Java HOME es un JDK");
		log.debug("comprobando:" + f.getAbsolutePath());
		return f.exists();
	}

	/*
	 * Compruebo java Home y si es JDK
	 */
	public boolean compruebaJavaHome() {
		// YA NO SE USA
		boolean resultado = false;
		String java_home = System.getenv("JAVA_HOME");
		log.debug("JAVA_HOME apunta a:" + java_home);
		if (java_home != null && esJDK()) {
			resultado = true;
		} else {
			resultado = false;
		}
		return resultado;

	}
}